package cn.psvmc.cxzapi.service.market;

import cn.psvmc.cxzapi.config.mybatisplus.service.impl.AbstractService;
import cn.psvmc.cxzapi.exception.ServiceException;
import cn.psvmc.cxzapi.mapper.market.TSortMapper;
import cn.psvmc.cxzapi.model.common.DetailEntity;
import cn.psvmc.cxzapi.model.market.TSort;
import cn.psvmc.cxzapi.util.ToolUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * 分类表 服务实现类
 * @Author auto
 * @Date 2024-08-13
 */
@Service
public class TSortService extends AbstractService<TSortMapper, TSort> {

    @Resource
    private TSortMapper tSortMapper;

    /**
    * @Date auto 2024-08-13 新增分类表
    * @Param tSort 分类表
    * @Return int
    */
    public int add(TSort tSort) {
        Integer pid = 0;
        if (pid.equals(tSort.getSortPid())) tSort.setSortPid(null);
        return tSortMapper.insert(tSort);
    }

    /**
    * @Date auto 2024-08-13 更新分类表
    * @Param tSort 分类表模型
    * @Return int
    */
    public int edit(TSort tSort){
        checkObjAndVersion(tSort.getSortId(), tSort.getRversion());//校验对象和版本号

        // 字段为null 不更新
        return tSortMapper.updateById(tSort);
    }

    /**
    * @Date auto 2024-08-13 查询分类表详情
    * @Param id 唯一id
    * @Return cn.psvmc.cxzapi.model.market.TSort
    */
    public Map<String, Object> detail(Integer id) {
        return tSortMapper.findById(id);
    }

    /**
    * @Date auto 2024-08-13 删除分类表
    * @Param id 唯一id
    * @Param rversion 版本号
    * @Return int
    */
    @Transactional(rollbackFor = Exception.class)
    public void delete(Integer id, Integer rversion) {
        TSort tSort = checkObjAndVersion(id, rversion);//校验对象和版本号

        String sortIds = id.toString();
        if (!ToolUtils.isTrueInteger(tSort.getSortPid())) {//一级分类
            String childSortIds = tSortMapper.findChildSortIds(id);
            if (ToolUtils.isNotEmpty(childSortIds)) {
                sortIds += "," + childSortIds;
            }
        }
        tSortMapper.updateGoodsBySortIds(sortIds);//删除分类商品
        tSortMapper.updateSortBySortIds(sortIds);//删除分类表
    }

    //校验对象和版本号
    private TSort checkObjAndVersion(Integer id, Integer rversion) {
        // 查询分类表详情
        TSort tSort = tSortMapper.selectById(id);
        if(tSort == null){
            throw new ServiceException("未查询到对应的分类表信息！");
        }

        // 比较数据版本号
        if(!rversion.equals(tSort.getRversion())){
            throw new ServiceException("数据已更新，请刷新后重试！");
        }
        return tSort;
    }

    /**
     * @Description 管理列表
     * @Date 2024/8/13 8:51
     * @Author YWX
     * @Param [entity]
     * @Return java.util.List<java.util.Map>
     **/
    public List<Map> listAll(DetailEntity entity){
        return tSortMapper.listAll(entity);
    }

    /**
     * @Description 选择列表
     * @Date 2024/8/13 8:55
     * @Author YWX
     * @Param []
     * @Return java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     **/
    public List<Map<String, Object>> listForSel(){
        List<Map<String, Object>> list = tSortMapper.listForSel();
        return ToolUtils.buildTree(list, "sortId", "sortPid", "childList");
    }
}
